	/**
	 * Se si utilizza JSON, allora non è possibile presentare il token CSRF all'interno di un parametro HTTP.
	 * Invece è possibile inviare il token all'interno di un'intestazione HTTP.
	 * È quindi possibile includere il token all'interno di tutte le richieste tua Ajax.
	 */
	
	var csrfHeader = $("meta[name='_csrf_header']").attr("content");
	var csrfToken = $("meta[name='_csrf']").attr("content");

	$(document).ajaxSend(function(e, xhr, options) {
		xhr.setRequestHeader(csrfHeader, csrfToken);
		xhr.setRequestHeader("X_HTTP_AJAX", "OK");
	});
	
	/**
	 * Register a handler to be called when Ajax requests complete with an error
	 */
	$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
		/**
		 * L'URL per reindirizzare a se un utente viene forzatamente sloggato da policy
		 */
		if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "PolicyLogout") {
			window.location.href = Constants.ContextPath + "login?policyLogout";
		}
		/**
		 * L'URL per reindirizzare a se un utente è stata richiesta da policy il cambio password.
		 */
		if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "ChPassword") {
			window.location.href = Constants.ContextPath + "chPassword?pId=" + jqxhr.getResponseHeader("pId") + "&uId=" + jqxhr.getResponseHeader("uId");
		}
		/**
		 * L'URL per reindirizzare a se un utente tenta di accedere a una risorsa e la loro sessione è scaduta a causa di un numero 
	     * eccessivo di sessioni per l'utente corrente.
		 */
		if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "ConcurrentSessionExpired") {
			window.location.href = Constants.ContextPath + "login?concurrentSessionExpired";
		}
		/**
		 * Sessione scaduta
		 */
		if(jqxhr.status === 401) window.location.href = Constants.ContextPath + "login?expired";
		/**
		 * L'utente ha tentato l'accesso ad una risorsa per il cui accesso non ha i permessi
		 */
		if(jqxhr.status === 403) window.location.href = Constants.ContextPath + "accessoNegato";
		/**
		 * L'utente ha tentato l'accesso ad una risorsa che non è stata trovata
		 */
		if(jqxhr.status === 404) console.log("Http --> Status: " + jqxhr.status + " - " + jqxhr.statusText + " - Url: " + jqxhr.config.url);
        	//window.location.href = Constants.ContextPath + "page404";
	});
	
	/**
	 * Register a handler to be called when Ajax requests complete with an error
	 */
	$(window).load(function() {
		$.ajaxSetup({
		    error: function(jqxhr, textStatus, errorThrown) {
		    	/**
				 * L'URL per reindirizzare a se un utente viene forzatamente sloggato da policy
				 */
		    	if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "PolicyLogout") {
		  		   window.location.href = Constants.ContextPath + "login?policyLogout";
		  	   	}
		    	else
		    		/**
					 * L'URL per reindirizzare a se un utente è stata richiesta da policy il cambio password.
					 */
		    		if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "ChPassword") {
						window.location.href = Constants.ContextPath + "chPassword?pId=" + jqxhr.getResponseHeader("pId") + "&uId=" + jqxhr.getResponseHeader("uId");
					}
			    else
			    	/**
					 * L'URL per reindirizzare a se un utente tenta di accedere a una risorsa e la loro sessione è scaduta a causa di un numero 
				     * eccessivo di sessioni per l'utente corrente.
					 */
			    	if(jqxhr.status === 503 && jqxhr.getResponseHeader("X_HTTP_REDIRECT") != null && jqxhr.getResponseHeader("X_HTTP_REDIRECT") == "ConcurrentSessionExpired") {
						window.location.href = Constants.ContextPath + "login?concurrentSessionExpired";
					}
		    	else
		    		/**
					 * Sessione scaduta
					 */
			    	if(jqxhr.status === 401) window.location.href = Constants.ContextPath + "login?expired";
		    	else
		    		/**
					 * L'utente ha tentato l'accesso ad una risorsa per il cui accesso non ha i permessi
					 */
		    	    if(jqxhr.status === 403) window.location.href = Constants.ContextPath + "accessoNegato";
		    	else
					/**
					 * L'utente ha tentato l'accesso ad una risorsa che non è stata trovata
					 */
					if(jqxhr.status === 404) console.log("Http --> Status: " + jqxhr.status + " - " + jqxhr.statusText + " - Url: " + jqxhr.config.url);
			        	//window.location.href = Constants.ContextPath + "page404";
		        else
		           this.myError(jqxhr, textStatus, errorThrown);	
		    },
		    myError: function(jqXHR, textStatus, errorThrown) {
		    	/**
		    	 * chiudo la popup di attesa 
		    	 */
				CommonUtils.hideLoader();
				/** 
				 * apri popup errore 
				 */
				CommonUtils.showMessageAlertApplication(jQuery.i18n.prop('message.operation.error'), jQuery.i18n.prop('PopupAlert.attenzione'), false, true, false);
		    }
		});
	});
	
	$.fn.dataTable.ext.errMode = function(settings, helpPage, message){
		console.log(message);
	};
